package com.bowen.demo.demo004;

import org.apache.shiro.crypto.hash.Md5Hash;

/**
 * <h3>java-study</h3>
 * <p>密码加密的处理工具类</p>
 * @author : zhang.bw
 * @date : 2021-03-10 13:49
 **/
public class PasswordUtils {

	/**
	 * 迭代次数
	 */
	private static final int ITERATIONS = 6;
	/**
	 * 盐值长度
	 */
	private static final int SALT_NUMBER = 6;

	/**
	 * 构造方法
	 */
	private PasswordUtils() {
		throw new AssertionError();
	}

	/**
	 * 证书凭证
	 *
	 * @param loginName 登录名
	 * @param salt      盐值
	 * @return
	 */
	public static String getCredentialsSalt(String loginName, String salt) {
		return loginName + salt;
	}

	/**
	 * 获得密码盐值
	 *
	 * @return
	 */
	public static String getSalt() {
		return RandomUtils.getString(SALT_NUMBER);
	}

	/**
	 * 字符串加密函数MD5实现
	 *
	 * @param password  密码
	 * @param loginName 用户名
	 * @param salt      盐值
	 * @return
	 */
	public static String getMd5Password(String password, String loginName, String salt) {
		return new Md5Hash(password, getCredentialsSalt(loginName, salt), ITERATIONS).toString();
	}

	public static void main(String[] args) {
		// 获取盐值
		String salt = getSalt();
		System.out.println(salt);
		// 获取加密后的密码
		String password = getMd5Password("123456", "root", salt);
		System.out.println(password);
	}

}
